package br.unisul.prolinear.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name = "DOCUMENTO")
public class Documento implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@SequenceGenerator(name="gen_documento",sequenceName="documento_iddocumento_seq")
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="gen_documento")
	@Column(name = "IDDOCUMENTO")
	private Long id;

	@Column(name = "DESCRICAO")
	private String descricao;

	@Column(name ="DS_TITULO")
	private String titulo;

	@Column(name = "DS_PALAVRACHAVE")
	private String palavrasChave;

	@Column(name = "DS_CONTEUDO")
	private String modelo;
	
	@Column(name = "DS_RESULTADOS")
	private String resultados;

	@Column(name = "NR_VISUALIZACOES")
	private int visualizacoes;

	@Column(name = "PUBLICO")
	private boolean publico;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="IDUSER",referencedColumnName="IDUSER")
	private Aluno dono;

	@Column(name = "DT_INSERT",insertable=false,updatable=false)
	private Date dataInsercao;

	@Column(name = "DT_UPDATE",insertable=false,updatable=false)
	private Date dataAlteracao;

	@ManyToMany(fetch=FetchType.LAZY,targetEntity=Aluno.class)
	@JoinTable(name = "USUARIO_DOCUMENTO",
	joinColumns = {
			@JoinColumn(name="IDDOCUMENTO")           
	},
	inverseJoinColumns = {
			@JoinColumn(name="IDUSER")
	})			
	private List<Aluno> alunosCompatilhados;

	public Documento() {
		publico = false;
		visualizacoes = 0;
		modelo= "";
		resultados = "";
		descricao = "Novo Documento";
	}

	public void incVisualizacoes(){
		visualizacoes++;
	}
	
	public List<Aluno> getAlunosCompatilhados() {
		return alunosCompatilhados;
	}
	public void setAlunosCompatilhados(List<Aluno> alunosCompatilhados) {
		this.alunosCompatilhados = alunosCompatilhados;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getPalavrasChave() {
		return palavrasChave;
	}
	public void setPalavrasChave(String palavrasChave) {
		this.palavrasChave = palavrasChave;
	}
	public String getModelo() {
		return modelo;
	}
	public void setModelo(String conteudo) {
		this.modelo = conteudo;
	}
	public long getVisualizacoes() {
		return visualizacoes;
	}
	public void setVisualizacoes(int visualizacoes) {
		this.visualizacoes = visualizacoes;
	}
	public boolean isPublico() {
		return publico;
	}
	public void setPublico(boolean publico) {
		this.publico = publico;
	}
	public Aluno getDono() {
		return dono;
	}
	public void setDono(Aluno dono) {
		this.dono = dono;
	}
	public Date getDataInsercao() {
		return dataInsercao;
	}
	public void setDataInsercao(Date dataInsercao) {
		this.dataInsercao = dataInsercao;
	}
	public Date getDataAlteracao() {
		return dataAlteracao;
	}
	public void setDataAlteracao(Date dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}


	public String getResultados() {
		return resultados;
	}


	public void setResultados(String resultados) {
		this.resultados = resultados;
	}
	
	@Override
	public boolean equals(Object obj){
		Documento doc = (Documento) obj;
		return id.equals(doc.getId());
	}
	

}



